package com.gz.moreaseManager.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.util.List;
import java.util.Map;

/**
 * JSON工具类
 */
public final class JsonUtil {

	private static final SerializeConfig config;

	static {
		config = new SerializeConfig();
	}

	private static final SerializerFeature[] features = {SerializerFeature.WriteMapNullValue, // 输出空置字段
			SerializerFeature.WriteNullListAsEmpty // List字段如果为null，输出为[]，而不是null
	};

	/**
	 * Object转JSON字符串
	 *
	 * @param object bean对象
	 * @return JSON字符串
	 */
	public static String toJson(Object object) {
		return JSON.toJSONString(object, config);
	}

	/**
	 * Object转JSON字符串
	 *
	 * @param object bean对象
	 * @return JSON字符串
	 */
	public static String toJsonByFeature(Object object) {
		return JSON.toJSONString(object, config, features);
	}

	/**
	 * Map转JSON字符串
	 *
	 * @param map Map集合
	 * @return JSON字符串
	 */
	public static String mapToJson(Map<String, Object> map) {
		return JSON.toJSONString(map);
	}

	/**
	 * Object转JSON对象
	 *
	 * @param object bean对象
	 * @return JSONObject
	 */
	public static JSONObject toObject(Object object) {
		if (object.getClass() == String.class)
			return (JSONObject) JSON.parse(object.toString());
		return (JSONObject) JSON.toJSON(object);
	}

	/**
	 * JSON字符串转Map
	 *
	 * @param json JSON字符串
	 * @return Map集合
	 */
	public static Map<String, Object> strToMap(String json) {
		return JSON.parseObject(json);
	}

	/**
	 * JSON字符串转JavaBean
	 *
	 * @param json  JSON字符串
	 * @param clazz 对象类
	 * @return 对象实体
	 */
	public static <T> T toObject(String json, Class<T> clazz) {
		return JSON.parseObject(json, clazz);
	}

	/**
	 * JSON字符串转数组
	 *
	 * @param json  JSON字符串
	 * @param clazz 对象类
	 * @return 对象Array
	 */
	public static <T> Object[] toArray(String json, Class<T> clazz) {
		return JSON.parseArray(json, clazz).toArray();
	}

	/**
	 * JSON字符串转List
	 *
	 * @param json  JSON字符串
	 * @param clazz 对象类
	 * @return 对象List
	 */
	public static <T> List<T> toList(String json, Class<T> clazz) {
		return JSON.parseArray(json, clazz);
	}

	/**
	 * JSON字符串转List<Map>
	 *
	 * @param json JSON字符串
	 * @return List(Map)
	 */
	public static List<Map<String, Object>> toListMap(String json) {
		return JSON.parseObject(json, new TypeReference<List<Map<String, Object>>>() {
		});
	}
}